package com.justnow.offer;

import java.util.Scanner;

/**
 * @author justnow
 * Created on 2020-09-03
 * Description
 *
 * 现在已知某图像文件格式采用8位二进制来表示一个像素点的像素值，对应的十进制数的取值范围为[0,255]。【像素值为非负整数】
 *
 * 存在如下图像模糊化算法：
 *
 * 取一个像素点上、下、左、右四个点（如果都存在的话）的像素值和自己的像素值的均值作为模糊化之后的像素值；如果上、下、左、右四个点有一个点或两个点不存在（例如边界点或者顶角点），则取存在的那些点的像素值和自己的像素值的均值。在处理过程中严格按照从上到下，从左至右的次序进行计算，即从第一行处理到最后一行，每一行从第一列处理到最后一列。
 *
 * 例如某个像素点的像素值为70，它周围上、下、左、右四个点的像素值分别为80,90,78,82，则模糊化之后它的像素值为(80+90+78+82+70)/5 = 80。
 *
 * 需要注意的是：在处理过程中，一个点周围的像素点的像素值可能会发生改变，我们需要利用更新之后的像素值来进行计算。
 *
 * 输入描述
 * 单组输入，输入数据有n+1行，其中n为像素矩阵的行数。
 *
 * 第1行包含两个正整数n和m，用空格分隔，表示像素矩阵的行数和列数。n<=1000，m<=1000。
 *
 * 接下来n行表示像素矩阵，每行包含m个取值范围为[0,255]的非负整数，两两之间用空格隔开。
 *
 * 输出描述
 * 每组输出数据包含n行，即模糊化之后的像素矩阵。
 *
 * 对于输出数据的每一行，输出m个值，两两之间用空格隔开。
 *
 * 如果计算所得的像素值为小数，需四舍五入取整。
 *
 * 样例输入
 * 2 2
 * 10 20
 * 30 40
 * 样例输出
 * 20 27
 * 30 32
 *
 *
 */
public class BaiduSolution02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int rows = scanner.nextInt();
        int cols = scanner.nextInt();

        int[][] array = new int[rows][cols];

        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                array[i][j] = scanner.nextInt();
            }
        }

        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                if (i == 0 && j == 0) {
                    int right = array[i][j+1];
                    int temp = array[i][j];
                    int down = array[i+1][j];
                    double by = 3.0;
                    array[i][j] = (int) Math.ceil((right + temp + down) / 3.0);
                } else if (i == 0 && j != 0 && j != cols - 1) {
                    array[i][j] = (int)Math.ceil((array[i][j] + array[i+1][j] + array[i][j-1] + array[i][j+1]) / 4.0);
                } else if (i == 0 && j == cols - 1) {
                    array[i][j] = (int)Math.ceil((array[i][j] + array[i-1][j] + array[i][j+1]) / 3.0);
                } else if (i>0 && i < rows && j == 0) {
                    array[i][j] = (int)Math.ceil((array[i][j] + array[i-1][j] + array[i+1][j] + array[i][j+1]) / 4.0);
                } else if (i == (rows - 1) && j == 0) {
                    array[i][j] = (int)Math.ceil((array[i][j] + array[i-1][j] + array[i][j+1]) / 3.0);
                } else if (i == rows - 1 && j > 0 && j < cols - 1) {
                    array[i][j] = (int)Math.ceil((array[i][j] + array[i][j-1] + array[i][j+1] + array[i-1][j]) / 4.0);
                } else if (i == rows - 1 && j == cols - 1) {
                    array[i][j] = (int)Math.ceil((array[i][j] + array[i-1][j] + array[i][j-1]) / 3.0);
                } else if (i > 0 && i < rows && j == cols - 1) {
                    array[i][j] = (int)Math.ceil((array[i][j] + array[i-1][j] + array[i+1][j] + array[i][j-1]) / 4.0);
                } else {
                    array[i][j] = (int)Math.ceil((array[i][j] + array[i-1][j] + array[i][j-1] + array[i-1][j] + array[i][j+1]) / 5.0);
                }
                if (j == cols - 1) {
                    System.out.println(array[i][j]);
                } else {
                    System.out.print(array[i][j] + " ");
                }

            }
        }

    }
}
